package com.cise.sort;

import java.util.ArrayList;
import java.util.Collections;

import com.cise.sort.utils.AbstractResult;

/**
 * �����㷨�Ľӿ�
 * @author ����
 *
 */
public abstract class AbstractSort {
	public abstract ArrayList<AbstractResult> sort(ArrayList<AbstractResult[]> results);
	
	/**
	 * ���ݾ������� ����ʹ�ö�����<br>
	 * 
	 * @param result
	 * @return
	 */
	protected ArrayList<AbstractResult> sortWithWeight(ArrayList<AbstractResult> result) {
		int size = result.size();
		for (int i = 0; i < size; i++) {
			// ����Ҫ����Ľڵ���
			int s = size - i;
			for (int j = s / 2 - 1; j >= 0; j--) {
				// ���������о���ϴ����Ϊ����������max����0��Ĭ�ϣ�����Ϊ��������max��Ϊ1
				int max = 0;
				if (2 * j + 2 < s
						&& result.get(2 * j + 1).getDistance() < result.get(2 * j + 2).getDistance()) {
					max = 1;
				}
				if (max == 0) {
					// ���ڵ�ľ���С������������
					if (result.get(j).getDistance() < result.get(2 * j + 1).getDistance()) {
						Collections.swap(result, j, 2 * j + 1);
					}
				} else {
					// ���ڵ�ľ���С������������
					if (result.get(j).getDistance() < result.get(2 * j + 2).getDistance()) {
						Collections.swap(result, j, 2 * j + 2);
					}
				}
			}
			// �Ѷ�Ϊδ����Ľڵ��е����ֵ
			// �Ѷ���δ��������һ���ڵ㻥��
			Collections.swap(result, 0, s - 1);
		}
		return result;
	}
}
